package utils

import (
	"fmt"
)

type Account struct {
	key     string
	loop    bool
	balance float64
	money   float64
	note    string
	detail  string
	flag    bool
}

func NewAccont() *Account {
	return &Account{
		key:     "",
		loop:    true,
		balance: 10000.0,
		money:   0.0,
		note:    "",
		flag:    false,
		detail:  "收支\t账户金额\t收支金额\t说\t明",
	}
}

func (account *Account) Menu() {
	for {
		fmt.Println("-------收支记账本------")
		fmt.Println("		1 收支明细	")
		fmt.Println("		2 登记收入	")
		fmt.Println("		3 登记支出	")
		fmt.Println("		4 退出	")
		fmt.Println("请选择(1-4)")
		fmt.Scanln(&account.key)

		switch account.key {
		case "1":
			account.showDetail()
		case "2":
			account.inCome()
		case "3":
			needBreak := account.pay()
			if needBreak {
				break
			}
		case "4":
			account.logout()
		default:
			fmt.Printf("请输入正确选项...")
		}
		if !account.loop {
			break
		}
	}

}

func (account *Account) showDetail() {
	fmt.Println("-----当前收支明细-----")
	if !account.flag {
		fmt.Println("当前没有收支明细，来一笔吧。。。")
	} else {
		fmt.Println(account.detail)
	}
}
func (account *Account) inCome() {
	fmt.Println("本次收入金额：")
	fmt.Scanln(&account.money)
	account.balance += account.money
	fmt.Println("本次收入说明：")
	fmt.Scanln(&account.note)
	// 收支	账户金额	收支金额	说	明
	account.detail += fmt.Sprintf("\n收入\t%v\t%v\t%v", account.balance, account.money, account.note)
	account.flag = true
}

func (account *Account) pay() bool {
	fmt.Println("本次支出金额：")
	fmt.Scanln(&account.money)
	if account.money > account.balance {
		fmt.Println("余额不足")
		return true
	}
	account.balance -= account.money
	fmt.Println("本次支出说明：")
	fmt.Scanln(&account.note)
	account.detail += fmt.Sprintf("\n支出\t%v\t%v\t%v", account.balance, account.money, account.note)
	account.flag = true
	return false
}
func (account *Account) logout() {
	fmt.Println("确定退出吗？ y/n")
	choice := ""
	for {
		fmt.Scanln(&choice)
		if choice == "y" || choice == "n" {
			break
		}
		fmt.Println("输入有误，重新输入 y/n")
	}
	if choice == "y" {
		account.loop = false
		fmt.Printf("你退出了...")
	}
}
